package main

import (
	"log"

	"gitee.com/z1gotool/gorm2mysql"
	"gitee.com/z1gotool/gorm2sqlite"
	"gitee.com/z1gotool/z1err"
	"gorm.io/gorm"
)

func main() {
	// https://github.com/go-gorm/gorm/issues/3565
	// https://juejin.cn/post/7131258433948352520

	var db *gorm.DB

	if true { // sqlite
		// sqliteFile := `z1sqlite.db`
		sqliteFile := `:memory:`
		dbTmp, err := gorm2sqlite.NewDB(sqliteFile, gorm.Config{})
		z1err.Check(err)
		db = dbTmp
	}

	if false { // mysql
		dbTmp, err := gorm2mysql.NewDB(
			gorm2mysql.DatabaseSetting{
				UserName:  `root`,
				Password:  ``,
				Host:      `127.0.0.1`,
				DBName:    `esb`,
				Charset:   `utf8`,
				ParseTime: true,
			},
			gorm.Config{},
		)
		z1err.Check(err)
		db = dbTmp
	}

	db.AutoMigrate(&User{})

	user := User{}
	txSql := db.Session(&gorm.Session{DryRun: false}).Debug().Model(&user).Where(`id=111`).Find(&user)
	log.Println(`-------View the SQL that Gorm will execute---------`, db.Dialector.Explain(
		txSql.Statement.SQL.String(),
		txSql.Statement.Vars...,
	))

	// _ = gormDB
}

type User struct {
	// gorm.Z1Model
	ID        int64 `gorm:"column:id;primarykey" json:"id" bson:"id"`
	CreatedAt int64 `gorm:"column:created_at;not null" json:"created_at" bson:"created_at"`
	UpdatedAt int64 `gorm:"column:updated_at;not null" json:"updated_at" bson:"updated_at"`
	// ----------------
	Username    string `gorm:"column:username;NOT NULL" json:"username" bson:"username"`              // 账号名称
	Password    string `gorm:"column:password;NOT NULL" json:"password" bson:"password"`              // 加密后的密码
	RoleID      int64  `gorm:"column:role_id;default:0;NOT NULL" json:"role_id" bson:"role_id"`       // 角色id
	Name        string `gorm:"column:name;NOT NULL" json:"name" bson:"name"`                          // 用户名
	Status      int64  `gorm:"column:status;default:1;NOT NULL" json:"status" bson:"status"`          // 用户状态：1正常，2禁用
	Type        int64  `gorm:"column:type;default:2;NOT NULL" json:"type" bson:"type"`                // 管理员类型 1-超级管理员 2-普通管理员
	Usbkey      int64  `gorm:"column:usbkey;default:0;NOT NULL" json:"usbkey" bson:"usbkey"`          // usbkey id
	Keyuid      string `gorm:"column:keyuid;NOT NULL" json:"keyuid" bson:"keyuid"`                    // 设备唯一硬件 ID
	Keypwd      string `gorm:"column:keypwd;NOT NULL" json:"keypwd" bson:"keypwd"`                    // 设备密码
	ServerSeed  string `gorm:"column:server_seed;NOT NULL" json:"server_seed" bson:"server_seed"`     // 种子码
	MobilePhone string `gorm:"column:mobile_phone" json:"mobile_phone" bson:"mobile_phone"`           // 手机号码
	Cid         string `gorm:"column:cid" json:"cid" bson:"cid"`                                      // 18位身份证号
	MobileLogin int64  `gorm:"column:mobile_login;default:0" json:"mobile_login" bson:"mobile_login"` // 使用手机验证码登录---1允许2不允许
	ApiToken    string `gorm:"column:api_token;NOT NULL" json:"api_token" bson:"api_token"`           // 接口token
	Extend      string `gorm:"column:extend" json:"extend" bson:"extend"`                             // 扩展字段为json
	PlaceID     int64  `gorm:"column:place_id;default:0;NOT NULL" json:"place_id" bson:"place_id"`    // 场所id
}
